package com.team.game.framework.impl;


import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;

import com.team.game.framework.Audio;
import com.team.game.framework.Music;
import com.team.game.framework.Sound;

import java.io.IOException;

public class AndroidAudio implements Audio {
    private AssetManager assets;
    private SoundPool soundPool;

    /**
     * Работа с аудио системой
     *
     * @param activity - получаем ссылку на вызывающую активность
     */
    AndroidAudio (Activity activity) {
        /*Указываем обработчика регулятора громкости для нашей активности*/
        activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
		/*Получаем доступ к ресурсам в папке внутренней Assets*/
        this.assets = activity.getAssets();
		/*Регистрируем экземпляр класса для работы со звуком*/
        this.soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
    }

    /**
     * Загрузить новую музыку
     *
     * @param filename - имя файла в папке ресурсов assets
     */
    @Override
    public Music newMusic(String filename) {
        try {
            AssetFileDescriptor assetDescriptor = assets.openFd(filename);
            return new AndroidMusic(assetDescriptor);
        } catch (IOException e) {
            throw new RuntimeException("Невозможно загрузить музыку '" + filename + "'");
        }
    }

    /**
     * Загружает новый звук
     *
     * @param filename - имя файла в папке ресурсов assets
     */
    @Override
    public Sound newSound(String filename) {
        try {
            AssetFileDescriptor assetDescriptor = assets.openFd(filename);
            int soundId = soundPool.load(assetDescriptor, 0);
            return new AndroidSound(soundPool, soundId);
        } catch (IOException e) {
            throw new RuntimeException("Невозможно загрузить звук '" + filename + "'");
        }
    }
}
